\documentclass[a4paper,11pt]{article}

%packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{subfigure}
\usepackage{epstopdf}
\usepackage{pdfpages}
\usepackage{float} 
\usepackage{amssymb}
\newcommand{\ud}{\,\mathrm{d}}
\usepackage[paper=a4paper, left=2cm, right=2cm, top=2.5cm, bottom=2.5cm]{geometry}
\usepackage{url}
\usepackage{listings}
\usepackage{color}
\usepackage{textcomp}

\author{Walsdorff Antoine, Fastré Ludovic, Dekeyser Olivier,\\ Chatelain Julie, Carion Tristan, Ballarini Robin,\\ Darko Nikolas}

\title{Mission : Tables de Hachage}
\begin{document}
\maketitle
\section*{Introduction}
	Dans le cadre de ce projet, nous avons dû réaliser un programme qui charge des données concernant des revues dans une table de hachage. Le programme devait permettre la recherche, par titre, d'une revue dans la table.
	
\section{Fonctionnement général}
	Notre implémentation du programme voulu utilise une interface graphique afin de communiquer avec l'utilisateur et lui permettre de faire des recherches parmi les revues\footnote{qui ont, au préalable, été lues depuis le fichier d'entrée}. 
	
	En ce qui concerne la table de hachage, nous avons utilisé l'implémentation \verb\java.util.HashMap\ de l'API java. Plus précisément, les HashMap utilisées contiennent des objets \verb\Revue\ et des clés qui sont des chaînes de caractères contenant les titres des revues. L'utilisation de la table de hachage se fait via un objet \verb\Biblio\ qui sert d'abstraction.
	
	Les données des revues sont chargées en mémoire depuis un fichier passé en argument au programme. Dans le fichier, les revues sont présentes sur un format donné : une ligne de données, chaque donnée séparée des autres par une virgule.
	
\section{Structure du programme}
	Nous avons structuré notre programme de la manière suivante. Nous avons fait en sorte que n'importe quel type de \verb\java.util.Map\ puisse être facilement utilisé, de même pour différents types de revues.
	\subsection{Classe Revue}
		Cette classe modélise les objets représentant les revues à stocker dans la table de hachage. Il est directement possible de créer un objet \verb\Revue\ depuis la ligne qui lui correspond dans le fichier d'entrée.
		
		Chaque revue contient différentes données dont au moins un titre. Des méthodes permettent de récupérer ces données ou de les modifier\footnote{setters et getters}.
	\subsection{Classe Biblio}
		Cette classe sert d'abstraction pour la table de hachage utilisée par le programme et la configure pour que les clés soient les titres des revues\footnote{sous forme de String} et que les objets soient les revues\footnote{ou des objets qui en héritent} elles-mêmes.
		
		On peut ajouter ou retirer des revues de la bibliothèque ainsi que fixer ou récupérer la table de hachage qu'elle utilise. Notons que la bibliothèque peut travailler sur n'importe quel \verb\Map\ mais fonctionne par défaut sur des \verb\HashMap\. De plus, cette classe fonctionnerait également pour des objets qui héritent de \verb\Revue\.
		
	\subsection{Classe IO}
		Cette classe gère les opérations de lecture sur le fichier d'entrée et permet de le lire ligne par ligne. Dans ce cas, cela se traduit par une lecture revue par revue.
		
	\subsection{Classe Search}
		Cette classe permet de rechercher une revue de la bibliothèque à partir de son titre. Si l'utilisateur n'entre que le début du titre, on recherche toutes les key qui commencent par ce bout de titre. Si on en trouve un alors on le retourne, sinon on affiche ``Title not found or too many occurrences''.
		
	\subsection{Classe SearchWindow}
		Cette classe permet de configurer les composants et différents listeners nécessaires au bon fonctionnement de l'interface graphique utilisateur.
		
	\subsection{Classe Main}
		Cette classe contient la méthode main du programme. Cette dernière charge les revues en mémoire\footnote{dans la table de hachage} depuis le fichier passé en argument du programme.
		
		Ensuite, il y a initialisation de l'interface graphique utilisateur. Après, le programme réagira aux demandes de l'utilisateur sur le GUI.
\end{document}